package main

import (
	"fmt"
	"strings"
)

type laser int

func (l laser) talk() string {
	return strings.Repeat("pew ", int(l))
}

type talker interface {
	talk() string
}

func shout(t talker) {
	louder := strings.ToUpper(t.talk())
	fmt.Println(louder)
}

// 接口可以与 struct 嵌入 特性一同使用
func main() {
	type starship struct {
		laser
	}

	s := starship{laser(3)}

	// 方法嵌入转发
	fmt.Println(s.talk())
	// s本身是没有talk方法的但是经过内部的laser类型转发之后，s也拥有了talk方法
	// 这样s也算是实现了talker接口
	shout(s)
}
